home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / hostsys.mod (.txt) < prev    next >
Oberon Text  |  1996-08-11  |  3KB  |  95 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. ParcElems
  4. Alloc
  5. MODULE HostSYS; (** RD 26-May-96*)
  6. IMPORT AmigaDos;
  7. CONST
  8.     BigEndianMachine*=TRUE;    (* 680x0 is big endian, i386 is little endian *)
  9.         Array which maps a character in the Oberon character set into a character in the host character set.
  10.     inverseMapping:ARRAY 256 OF CHAR;
  11.         Array which maps a character in the host character set into a character in the Oberon character set.
  12.     mapping:ARRAY 256 OF CHAR;
  13. PROCEDURE StdOut*(str: ARRAY OF CHAR; len: LONGINT);
  14. BEGIN
  15.     IF AmigaDos.Write(AmigaDos.Output(),str,len)=1 THEN END
  16. END StdOut;
  17. PROCEDURE IsNameChar1*(ch:CHAR):BOOLEAN;    (* Is ch valid for first character of a name name? *)
  18. BEGIN
  19.     RETURN (('A'<=ch) & (ch<='Z'))
  20.         OR (('a'<=ch) & (ch<='z'))
  21.         OR (ch='.')
  22.         OR (ch='/')
  23. END IsNameChar1;
  24. PROCEDURE IsNameChar*(ch:CHAR):BOOLEAN;    (* Is ch valid for second to last character of a name? *)
  25. BEGIN
  26.     RETURN (('A'<=ch) & (ch<='Z'))
  27.         OR (('a'<=ch) & (ch<='z'))
  28.         OR (('0'<=ch) & (ch<='9'))
  29.         OR (ch='.')
  30.         OR (ch='/')
  31.         OR (ch=':')
  32.         OR (ch='_')
  33. END IsNameChar;
  34. PROCEDURE toHost*(ch:CHAR):CHAR;    (* Convert charcter from host char set to Oberon char set *)
  35. BEGIN
  36.     RETURN inverseMapping[ORD(ch)]
  37. END toHost;
  38. PROCEDURE toOberon*(ch:CHAR):CHAR;    (* Convert charcter from host char set to Oberon char set *)
  39. BEGIN
  40.     RETURN mapping[ORD(ch)]
  41. END toOberon;
  42. PROCEDURE makeMapping(ch1,ch2:CHAR);
  43.     ch:CHAR;
  44. BEGIN
  45.     IF mapping[ORD(ch1)]#ch2 THEN    (* other mappings caused this to be already ok. *)
  46.         IF mapping[ORD(ch2)]#ch2 THEN    (* was already substituted. Search for new location of ch2. *)
  47.             ch:=mapping[ORD(ch2)];
  48.             WHILE mapping[ORD(ch)]#ch2 DO ch:=mapping[ORD(ch)] END;
  49.             ch2:=ch
  50.         END;
  51.         mapping[ORD(ch2)]:=mapping[ORD(ch1)];
  52.         mapping[ORD(ch1)]:=ch2
  53. END makeMapping;
  54. PROCEDURE initMapping;
  55.     i:INTEGER;
  56. BEGIN
  57.     FOR i:=0 TO 0FFH DO mapping[i]:=CHR(i) END
  58. END initMapping;
  59. PROCEDURE createInverseMapping;
  60.     i:INTEGER;
  61. BEGIN
  62.     FOR i:=0 TO 0FFH DO
  63.         inverseMapping[ORD(mapping[i])]:=CHR(i)
  64. END createInverseMapping;
  65. BEGIN
  66.     initMapping;
  67.     makeMapping( 00DX,00AX);
  68.     makeMapping( 0C4X,"
  69.     makeMapping( 0D6X,"
  70.     makeMapping( 0DCX,"
  71.     makeMapping( 0E4X,"
  72.     makeMapping( 0EBX,"
  73.     makeMapping( 0EFX,"
  74.     makeMapping( 0F6X,"
  75.     makeMapping( 0FCX,"
  76.     makeMapping( 0E2X,"
  77.     makeMapping( 0EAX,"
  78.     makeMapping( 0EEX,"
  79.     makeMapping( 0F4X,"
  80.     makeMapping( 0FBX,"
  81.     makeMapping( 0E0X,"
  82.     makeMapping( 0E8X,"
  83.     makeMapping( 0ECX,"
  84.     makeMapping( 0F2X,"
  85.     makeMapping( 0F9X,"
  86.     makeMapping( 0E1X,"
  87.     makeMapping( 0E9X,"
  88.     makeMapping( 0E7X,"
  89.     makeMapping( 0F1X,"
  90.     makeMapping( 0DFX,"
  91.     createInverseMapping
  92. END HostSYS.
  93. Date    Author    Modification
  94. 1996-08-11    degner@pallas.amp.uni-hannover.de    Created first AMIGA version.
  95.